package testPackage;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;

import java.io.File;
/**
 * step by step 07 Selenium中的异常
 * NoSuchElementException -
 * 原因：无法从提供的定位器中找到任何元件
 * 解决：检查元素定位器的正确性，并确保与元素交互时存在该元素
 * ElementNotVisibleException -
 * 原因：该元素存在但DOM中不可见
 * 解决:与元素交互时，请确保该元素在可见区域中。
 * 实现此目的的一些常用方法：最大化浏览器窗口；滚动到该元素
 * NoAlertPresentException -
 * 原因：尝试切换到警报，但不存在目标警报
 * 解决：确保与警报进行交互时存在警报
 * NoSuchFrameException -
 * 原因：尝试切换到这个帧，但目标帧不存在
 * 解决：检查框架定位器，并确保框架存在于网页上。
 * NoSuchWindowException -
 * 原因：切换到窗口，但目标窗口不存在
 * 解决：使用driver.getWindowHandles()获取窗口句柄的列表，并切换到该特定时间出现的句柄之一。
 * UnexpectedAlertPresentException -
 * 原因：意外警报阻止了正常交互
 * 解决：接受或关闭警报以继续与DOM交互
 * TimeoutException -
 * 原因：命令执行超时
 * 解决：这可能是一个有效的例外，除非我们在隐式或显式等待中设置了非常低的超时值。
 * InvalidElementStataException -
 * 原因：元素的状态不适用于所需的操作
 * 解决：通过显式等待，等待所需的ExceptionCondition，确保该元素可用于执行所需的操作
 * NoSuchAttributeException -
 * 原因：试图获取属性的值，但该属性不正确
 * 解决：只需确保从元素中获取的属性值确实存在于元素中即可。
 * WebDriverException -
 * 原因：驱动程序实例存在某些问题而无法启动
 * 解决：检查驱动程序的实例化以及实例化驱动程序对象所需的依赖关系。
 * step by step 08 Selenium WebDriver中的屏幕截图（未有实例）
 * 自动化测试中，如果由于任何Web元素的断言或不可用而导致失败，我们可以通过浏览器的屏幕截图。
 * step by step 09 断言和验证的区别
 * Assert - 验证一旦失败，该特定测试方法的执行将停止。并将测试方法标记为失败
 * Verify - 即使断言失败，测试方法仍继续执行，尽管测试方法被标记为失败，但测试方法中的
 * 其它语句将正常执行。“验证功能”是通过软断言实现的。
 * step by step 10 driver.close()和driver.quit()区别
 * driver.close() -用于关闭当前具有焦点的浏览器窗口。如果只有一个浏览器打开，则关闭整个浏览器会话。
 * 可用性：处理多个浏览器选项卡或窗口
 * driver.quit() -用于退出整个浏览器会话和所有相关的浏览窗口，选项卡和弹出窗口。
 * step by step 11 findElement()和findElements() 区别
 * 1、定义
 * findElement() - 定位元素
 * findElements() - 定位元素列表
 * 2、句法
 * WebElement element = driver.findElement(通过定位器);
 * List<WebElement> elements = driver.findElements(通过定位器);
 * 3、对于多个元素
 * 同一定位器匹配多个元素，findElement() 返回找到的第一个元素，findElements() 返回元素列表
 * 4、找不到元素时
 * findElement()会抛出NoSuchElementException，findElements() 返回大小为0的列表。
 * （因此，findElements() 通常用于检查元素的存在。）
 *
 */
public class SeleniumOther06 {
    //断言和验证/软断言比较
    @Test
    public void assertionTest(){
        Assert.assertEquals(1 + 2,3);
        System.out.println("Passing 1.");
        //失败断言
        Assert.fail("Failing second assertion.");
        System.out.println("Failing 2.");
    }
    @Test
    public void softAssertTest(){
        SoftAssert softAssert = new SoftAssert();
        //软断言失败
        softAssert.fail("Failing first softAssert.");
        System.out.println("Failing 1.");
        softAssert.fail("Failing second softAssert.");
        System.out.println("Failing 2.");

        softAssert.assertAll();

    }
}
